<?php
/*
	Esta es una clase de demostracion para que se conozca como crear metodos alternos de inicio de sesion.

	en esta clase se autenticara al usuario contra la lista de user y password definida en config/main asi:


	// EN CONFIG/MAIN LE INDICAS A CRUGE QUE USE ESTA CLASE 'authdemo':

		'cruge'=>array(
			'tableprefix'=>'cruge_',
			// 'availableAuthMethods'=>array('default'),
			'availableAuthMethods'=>array('authdemo'),
			...
			...
			(el string "authdemo" debe esta definido en la clase de autenticacion,
			este string es devuelto en la clase: AlternateAuthDemo.php )


 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
	@copyright Copyright &copy; 2008-2012 Yii Software LLC
	@license http://www.yiiframework.com/license/
*/
class AlternateAuthDemo extends CBaseUserIdentity implements ICrugeAuth {

	private $username;
	private $password;
	private $options;

	private $_user;

	/**
		este nombre sera referenciado en config/main para hacerle saber a Cruge que use esta clase
		para autenticar:

			'availableAuthMethods'=>array('authdemo'),
	*/
	public function authName(){
		return "authdemo";
	}

	/*	no confundir con un getUserName, esto es un getUser a nivel de instancia,
		debe retornar algun objeto que implemente a ICrugeStoredUser, por defecto se puede usar un
		objeto de clase CrugeStoredUser.

		@returns instancia de ICrugeStoredUser hallado tras la autenticacion exitosa
	*/
	public function getUser(){
		return $this->_user;
	}

	/*
		recibe desde cruge parametros considerados como user y password, pueden no ser user y password a nivel
		conceptual..sino por ejemplo, cedula y clave, numerotarjeta y clave, etc.
	*/
	public function setParameters($username,$password,$options = array()){
		$this->username = $username;
		$this->password = $password;
		$this->options = $options;
	}

	public function authenticate() {

		// en errorcode reporta el error generado
		//
		$this->errorCode=self::ERROR_USERNAME_INVALID;


		// retorna boolean, true si la autenticacion es exitosa
		//
		return $this->errorCode==self::ERROR_NONE;
	}
}

